/*
    created:2023/4/22   
    filename: BST.h
    author: 李东霖
    purpose：二叉排序树的数据结构和基本操作
*/

#ifndef _BST_H_
#define _BST_H_

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef int ElemType;

typedef struct BSTNode
{
    ElemType data;
    struct BSTNode* lchild;
    struct BSTNode* rchild;
}BSTNode,*BSTree; 

//操作  
//在树tree中插入元素elem 返回值：1-成功 0-失败,tree存在元素elem -1-传入参数错误  
int Insert(BSTree *tree,ElemType *elem);

//在树tree中插入元素elem 返回值：1-成功 0-失败,tree存在元素elem -1-传入参数错误  
int Insert1(BSTree *tree,ElemType *elem);

//使用数组序列创建一个BST
void CreateBST(BSTree* tree,ElemType *elemarray,int len);

//在树tree中查找元素elem 成功返回找到的结点，失败返回NULL
BSTNode* Find(BSTree tree,ElemType *elem);  
   
//在树tree中查找元素elem 成功返回找到的结点，失败返回NULL
BSTNode* Find1(BSTree tree,ElemType *elem);

//在树tree中删除元素elem 返回值：1-成功 0-失败（tree没有元素elem）-1-传入的参数错误  
int Delete(BSTree *tree,ElemType *elem);

// 求二叉树的高度。
int TreeDepth(BSTree tree);

// 访问结点元素。
void visit(BSTNode *Node);

// 采用递归的方法对二叉树的先序遍历。
void PreOrder(BSTree tree);

// 采用递归的方法对二叉树的中序遍历。
void InOrder(BSTree tree);

// 采用递归的方法对二叉树的后序遍历。
void PostOrder(BSTree tree);

#endif //!_BST_H_